<script setup lang="ts">
/**
 * Pick 选择对象里 需要的字段
 * Omit 排除对象里 排除的字段
 */
type MyObj = {
  a: number
  b: string
  c: boolean
  d: undefined
  e: null
}
// Pick 取对象a和b字段
// Pick<对象类型，取对象字段 | 取对象字段 。。。>
type PickObj = Pick<MyObj, 'a' | 'b'>

// Omit 排除对象a和b字段
// Omit<对象类型，排除对象字段A | 排除对象字段B 。。。>
type OmitObj = Omit<MyObj, 'a' | 'b'>

// keyof T  => 'a' | 'b' | 'c' | 'd' | 'e'
// K 只能从 'a' | 'b' | 'c' | 'd' | 'e'里面取
// [Z in K ] 假设Z 传的是 'a' | 'b'  说明遍历'a' | 'b'
type MyPick<T, K extends keyof T> = {
  [Z in K]: T[Z]
}
type MyPickObj = MyPick<MyObj, 'e'>
type Test = keyof any

// T 对象里abcde K number | string | symbol
// Pick 取T里的字段

// Exclude<keyof T, K>   <'a' | 'b' | 'c' | 'd', 'e', 'a' | 'b'>
// 'c' 'd' 'e'
type MyOmit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>
</script>

<template>
  <div class="playground-page">
    <h1>playground</h1>
  </div>
</template>

<style scoped lang="scss"></style>
